/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.com.cotelasa.scp.entidad;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.Date;
import javax.persistence.*;
import javax.xml.bind.annotation.XmlTransient;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

/**
 *
 * @author Esparza
 */
@Entity
@Table(name = "factura_proforma",catalog = "bdcotelasa", schema = "cotelasa")
@NamedQueries({
    @NamedQuery(name = "FacturaProforma.findAll", query = "SELECT f FROM FacturaProforma f"),
    @NamedQuery(name = "FacturaProforma.findById", query = "SELECT f FROM FacturaProforma f WHERE f.id = :id"),
    @NamedQuery(name = "FacturaProforma.findByCodigoProforma", query = "SELECT f FROM FacturaProforma f WHERE f.codigoProforma = :codigoProforma"),
    @NamedQuery(name = "FacturaProforma.findByEstadoProforma", query = "SELECT f FROM FacturaProforma f WHERE f.estadoProforma = :estadoProforma"),
    @NamedQuery(name = "FacturaProforma.findByFechaFacturaProforma", query = "SELECT f FROM FacturaProforma f WHERE f.fechaFacturaProforma = :fechaFacturaProforma"),
    @NamedQuery(name = "FacturaProforma.findByFechaDelivery", query = "SELECT f FROM FacturaProforma f WHERE f.fechaDelivery = :fechaDelivery"),
    @NamedQuery(name = "FacturaProforma.findByModoDespacho", query = "SELECT f FROM FacturaProforma f WHERE f.modoDespacho = :modoDespacho"),
    @NamedQuery(name = "FacturaProforma.findByMontoTotal", query = "SELECT f FROM FacturaProforma f WHERE f.montoTotal = :montoTotal"),
    @NamedQuery(name = "FacturaProforma.findByMontoTotalSoles", query = "SELECT f FROM FacturaProforma f WHERE f.montoTotalSoles = :montoTotalSoles"),
    @NamedQuery(name = "FacturaProforma.findByCambioCompra", query = "SELECT f FROM FacturaProforma f WHERE f.cambioCompra = :cambioCompra"),
    @NamedQuery(name = "FacturaProforma.findByCambioVenta", query = "SELECT f FROM FacturaProforma f WHERE f.cambioVenta = :cambioVenta"),
    @NamedQuery(name = "FacturaProforma.findByCuentaBancaria", query = "SELECT f FROM FacturaProforma f WHERE f.cuentaBancaria = :cuentaBancaria"),
    @NamedQuery(name = "FacturaProforma.findByCodigoSwift", query = "SELECT f FROM FacturaProforma f WHERE f.codigoSwift = :codigoSwift"),
    @NamedQuery(name = "FacturaProforma.findByBancoNombre", query = "SELECT f FROM FacturaProforma f WHERE f.bancoNombre = :bancoNombre"),
    @NamedQuery(name = "FacturaProforma.findByAdelanto", query = "SELECT f FROM FacturaProforma f WHERE f.adelanto = :adelanto"),
    @NamedQuery(name = "FacturaProforma.findByFechaPagoSaldo", query = "SELECT f FROM FacturaProforma f WHERE f.fechaPagoSaldo = :fechaPagoSaldo"),
    @NamedQuery(name = "FacturaProforma.findByTipoFecha", query = "SELECT f FROM FacturaProforma f WHERE f.tipoFecha = :tipoFecha"),
    @NamedQuery(name = "FacturaProforma.findByTipoPrecio", query = "SELECT f FROM FacturaProforma f WHERE f.tipoPrecio = :tipoPrecio"),
    @NamedQuery(name = "FacturaProforma.findByEstadoRegistro", query = "SELECT f FROM FacturaProforma f WHERE f.estadoRegistro = :estadoRegistro"),
    @NamedQuery(name = "FacturaProforma.findByTipoFP", query = "SELECT f FROM FacturaProforma f WHERE f.tipoFp = :tipoFp"),    
    @NamedQuery(name = "FacturaProforma.findByOrigenProducto", query = "SELECT f FROM FacturaProforma f WHERE f.origenProducto = :origenProducto"),
    @NamedQuery(name = "FacturaProforma.findByColeccionNombre", query = "SELECT f FROM FacturaProforma f WHERE f.coleccionNombre = :coleccionNombre"),
    @NamedQuery(name = "FacturaProforma.findByUsrCreacion", query = "SELECT f FROM FacturaProforma f WHERE f.usrCreacion = :usrCreacion"),
    @NamedQuery(name = "FacturaProforma.findByFecCreacion", query = "SELECT f FROM FacturaProforma f WHERE f.fecCreacion = :fecCreacion"),
    @NamedQuery(name = "FacturaProforma.findByUsrModificacion", query = "SELECT f FROM FacturaProforma f WHERE f.usrModificacion = :usrModificacion"),
    @NamedQuery(name = "FacturaProforma.findByFecModificacion", query = "SELECT f FROM FacturaProforma f WHERE f.fecModificacion = :fecModificacion"),
    @NamedQuery(name = "FacturaProforma.findByCantidadTotalProductos", query = "SELECT f FROM FacturaProforma f WHERE f.cantidadTotalProductos = :cantidadTotalProductos"),
    @NamedQuery(name = "FacturaProforma.findByPesoTotal", query = "SELECT f FROM FacturaProforma f WHERE f.pesoTotal = :pesoTotal")})
public class FacturaProforma implements Serializable {
    
    
    private static final long serialVersionUID = 1L;
    @Id
    @SequenceGenerator(name = "generadorFacturaProforma", sequenceName = "cotelasa.factura_proforma_id_seq")
    @GeneratedValue(generator = "generadorFacturaProforma")
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;
    
    @Column(name = "codigo_proforma")
    private String codigoProforma;
    
    @Column(name = "estado_proforma")
    private String estadoProforma;
    
    @Column(name = "modo_despacho")
    private String modoDespacho;
    
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Column(name = "monto_total")
    private BigDecimal montoTotal;
    
    @Column(name = "cuenta_bancaria")
    private String cuentaBancaria;
    
    @Column(name = "coleccion_nombre")
    private String coleccionNombre;
    
    @Column(name = "codigo_swift")
    private String codigoSwift;
    
    @Column(name = "banco_nombre")
    private String bancoNombre;
    
    @Column(name = "adelanto")
    private Integer adelanto;
    
    @Column(name = "fecha_pago_saldo")
    private Integer fechaPagoSaldo;
    
    @Column(name = "tipo_fecha")
    private String tipoFecha;
    
    @Column(name = "tipo_precio")
    private String tipoPrecio;
        
    @Column(name = "cantidad_total_productos")
    private BigDecimal cantidadTotalProductos;
    
    @Column(name = "fecha_factura_proforma")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaFacturaProforma;
    
    @Column(name = "fecha_delivery")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaDelivery;
    
    @Column(name = "tipo_fp")
    private Character tipoFp;
    
    @Basic(optional =     false)
    @Column(name = "fec_creacion")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fecCreacion;
    
    @Column(name =     "fec_modificacion")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fecModificacion;
    
    @Basic(optional = false)
    @Column(name = "peso_total")
    private BigDecimal pesoTotal;
    
    @Basic(optional = false)
    @Column(name = "monto_total_soles")
    private BigDecimal montoTotalSoles;
    
    @Column(name = "cambio_compra")
    private BigDecimal cambioCompra;
    
    @Column(name = "cambio_venta")
    private BigDecimal cambioVenta;
    
    @Basic(optional = false)
    @Column(name = "estado_registro")
    private char estadoRegistro;
    
    @Column(name = "origen_producto")
    private String origenProducto;
    
    @Basic(optional = false)
    @Column(name = "usr_creacion")
    private String usrCreacion;
    
    @Column(name = "usr_modificacion")
    private String usrModificacion;
    
    @JoinColumn(name = "id_tipo_moneda", referencedColumnName = "id")
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private TipoMoneda idTipoMoneda;
    
    @JoinColumn(name = "id_empresa", referencedColumnName = "id")
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Empresa idEmpresa;
    
    @JoinColumn(name = "id_cliente", referencedColumnName = "id")
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Cliente idCliente;
    
    @JoinColumn(name = "cliente_marca", referencedColumnName = "id")
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Cliente clienteMarca;
    
    @OneToMany(mappedBy = "idFacturaProforma", fetch = FetchType.LAZY)
    private Collection<OrdenPedido> ordenPedidoCollection;
    
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idFacturaProforma", fetch = FetchType.LAZY)
    private Collection<DetallePedidoFp> detallePedidoFpCollection;

    public FacturaProforma() {
    }

    public FacturaProforma(Integer id) {
        this.id = id;
    }

    public FacturaProforma(Integer id, String cuentaBancaria, String bancoNombre, String tipoPrecio, char estadoRegistro, String usrCreacion, Date fecCreacion, BigDecimal pesoTotal) {
        this.id = id;
        this.cuentaBancaria = cuentaBancaria;
        this.bancoNombre = bancoNombre;
        this.tipoPrecio = tipoPrecio;
        this.estadoRegistro = estadoRegistro;
        this.usrCreacion = usrCreacion;
        this.fecCreacion = fecCreacion;
        this.pesoTotal = pesoTotal;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getCodigoProforma() {
        return codigoProforma;
    }

    public void setCodigoProforma(String codigoProforma) {
        this.codigoProforma = codigoProforma;
    }

    public String getEstadoProforma() {
        return estadoProforma;
    }

    public void setEstadoProforma(String estadoProforma) {
        this.estadoProforma = estadoProforma;
    }

    public Date getFechaFacturaProforma() {
        return fechaFacturaProforma;
    }

    public void setFechaFacturaProforma(Date fechaFacturaProforma) {
        this.fechaFacturaProforma = fechaFacturaProforma;
    }

    public Date getFechaDelivery() {
        return fechaDelivery;
    }

    public void setFechaDelivery(Date fechaDelivery) {
        this.fechaDelivery = fechaDelivery;
    }

    public String getModoDespacho() {
        return modoDespacho;
    }

    public void setModoDespacho(String modoDespacho) {
        this.modoDespacho = modoDespacho;
    }

    public BigDecimal getMontoTotal() {
        return montoTotal;
    }

    public void setMontoTotal(BigDecimal montoTotal) {
        this.montoTotal = montoTotal;
    }

    public String getCuentaBancaria() {
        return cuentaBancaria;
    }

    public void setCuentaBancaria(String cuentaBancaria) {
        this.cuentaBancaria = cuentaBancaria;
    }

    public String getCodigoSwift() {
        return codigoSwift;
    }

    public void setCodigoSwift(String codigoSwift) {
        this.codigoSwift = codigoSwift;
    }

    public String getBancoNombre() {
        return bancoNombre;
    }

    public void setBancoNombre(String bancoNombre) {
        this.bancoNombre = bancoNombre;
    }

    public Integer getAdelanto() {
        return adelanto;
    }

    public void setAdelanto(Integer adelanto) {
        this.adelanto = adelanto;
    }

    public Integer getFechaPagoSaldo() {
        return fechaPagoSaldo;
    }

    public void setFechaPagoSaldo(Integer fechaPagoSaldo) {
        this.fechaPagoSaldo = fechaPagoSaldo;
    }

    public String getTipoFecha() {
        return tipoFecha;
    }

    public void setTipoFecha(String tipoFecha) {
        this.tipoFecha = tipoFecha;
    }

    public String getTipoPrecio() {
        return tipoPrecio;
    }

    public void setTipoPrecio(String tipoPrecio) {
        this.tipoPrecio = tipoPrecio;
    }

    public char getEstadoRegistro() {
        return estadoRegistro;
    }

    public void setEstadoRegistro(char estadoRegistro) {
        this.estadoRegistro = estadoRegistro;
    }

    public String getOrigenProducto() {
        return origenProducto;
    }

    public void setOrigenProducto(String origenProducto) {
        this.origenProducto = origenProducto;
    }

    public String getUsrCreacion() {
        return usrCreacion;
    }

    public void setUsrCreacion(String usrCreacion) {
        this.usrCreacion = usrCreacion;
    }

    public Date getFecCreacion() {
        return fecCreacion;
    }

    public void setFecCreacion(Date fecCreacion) {
        this.fecCreacion = fecCreacion;
    }

    public String getUsrModificacion() {
        return usrModificacion;
    }

    public void setUsrModificacion(String usrModificacion) {
        this.usrModificacion = usrModificacion;
    }

    public Date getFecModificacion() {
        return fecModificacion;
    }

    public void setFecModificacion(Date fecModificacion) {
        this.fecModificacion = fecModificacion;
    }

    public BigDecimal getCantidadTotalProductos() {
        return cantidadTotalProductos;
    }

    public void setCantidadTotalProductos(BigDecimal cantidadTotalProductos) {
        this.cantidadTotalProductos = cantidadTotalProductos;
    }

    public BigDecimal getPesoTotal() {
        return pesoTotal;
    }

    public void setPesoTotal(BigDecimal pesoTotal) {
        this.pesoTotal = pesoTotal;
    }

    public TipoMoneda getIdTipoMoneda() {
        return idTipoMoneda;
    }

    public void setIdTipoMoneda(TipoMoneda idTipoMoneda) {
        this.idTipoMoneda = idTipoMoneda;
    }

    public Empresa getIdEmpresa() {
        return idEmpresa;
    }

    public void setIdEmpresa(Empresa idEmpresa) {
        this.idEmpresa = idEmpresa;
    }

    public Cliente getIdCliente() {
        return idCliente;
    }

    public void setIdCliente(Cliente idCliente) {
        this.idCliente = idCliente;
    }
    
    public Collection<DetallePedidoFp> getDetallePedidoFpCollection() {
        return detallePedidoFpCollection;
    }

    public void setDetallePedidoFpCollection(Collection<DetallePedidoFp> detallePedidoFpCollection) {
        this.detallePedidoFpCollection = detallePedidoFpCollection;
    }
    
    public BigDecimal getMontoTotalSoles() {
        return montoTotalSoles;
    }

    public void setMontoTotalSoles(BigDecimal montoTotalSoles) {
        this.montoTotalSoles = montoTotalSoles;
    }

    public BigDecimal getCambioCompra() {
        return cambioCompra;
    }

    public void setCambioCompra(BigDecimal cambioCompra) {
        this.cambioCompra = cambioCompra;
    }

    public BigDecimal getCambioVenta() {
        return cambioVenta;
    }

    public void setCambioVenta(BigDecimal cambioVenta) {
        this.cambioVenta = cambioVenta;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof FacturaProforma)) {
            return false;
        }
        FacturaProforma other = (FacturaProforma) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "pe.com.cotelasa.scp.entidad.FacturaProforma[ id=" + id + " ]";
    }

    public String getColeccionNombre() {
        return coleccionNombre;
    }

    public void setColeccionNombre(String coleccionNombre) {
        this.coleccionNombre = coleccionNombre;
    }


    public Character getTipoFP() {
        return tipoFp;
    }

    public void setTipoFP(Character tipoFp) {
        this.tipoFp = tipoFp;
    }

    @XmlTransient
    public Collection<OrdenPedido> getOrdenPedidoCollection() {
        return ordenPedidoCollection;
    }

    public void setOrdenPedidoCollection(Collection<OrdenPedido> ordenPedidoCollection) {
        this.ordenPedidoCollection = ordenPedidoCollection;
    }

    public Cliente getClienteMarca() {
        return clienteMarca;
    }

    public void setClienteMarca(Cliente clienteMarca) {
        this.clienteMarca = clienteMarca;
    }

    
}